
package htmlreaderclient;

import htmlreader.exceptions.ExceptionIPInvalido;
import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.Scanner;
import java.util.regex.Pattern;

/**
 *
 * @author leopoldes
 */
public class TesteCliente {

    private static String ip;
    private static int porta;
    private static Cliente client;
    private static int comandoEnviado;
    private static File arquivoRecebido;


    public static void main(String argv[]) throws ExceptionIPInvalido, UnknownHostException, IOException{

      
       /*Menu Principal*/
       mostraMenuInicial() ;

       /*Conectar Servidor*/
       conectarServidor();

       /*Menu Principal*/
       mostraMenuPrincipal();

       //executar comando;
        lerComando();

        System.out.println("Cliente finalizou.");

    }

    public static void mostraMenuPrincipal() throws IOException{

        System.out.println("\n\n\n");
        System.out.println("============================");
        System.out.println("=      MENU PRINCIPAL      =");
        System.out.println("============================");
        System.out.println("\n\n");

        //ler comando;
        exibirOpcoesDoMenu();        

    }

    
    public static void lerComando() throws IOException{
        Scanner scanner = new Scanner(System.in);
        comandoEnviado = scanner.nextInt();
        client.setComando(comandoEnviado);

        System.out.println("Comando do Cliente: " + client.getComando());

        switch (comandoEnviado)        {
            case 0:
                    System.out.println("Cliente - enviando comando 0");//teste
                    client.transfereDados();
                    break;
            case 1:                    
                    //client.pedeListaDeArquivos();
                    System.out.println("\n:: Cliente - enviando comando 1");
                    client.transfereDados();
                    break;
            case 2:
                    System.out.println("\n:: Cliente - enviando comando 2");
                    client.transfereDados();

                    break;
            case 3:
                    System.out.println("\n:: Cliente - enviando comando 3");
                    client.transfereDados();

                    break;
            case 4:
                    System.out.println("\n:: Cliente - enviando comando 4");
                    client.transfereDados();

                    break;
        }

    }

    public static void exibirOpcoesDoMenu(){
        System.out.println("\t1- Requisitar lista de arquivos do servidor");
        System.out.println("\t2- Exibir lista de arquivos recebidos");
        System.out.println("\t3- Exibir menu principal");
        System.out.println("\t4- Encerrar conexão");

    }


    public static void conectarServidor() throws UnknownHostException, IOException{
        System.out.println("\n\n:: Estabelecendo conexão com host");

        client = new Cliente(TesteCliente.ip, TesteCliente.porta);
        client.estabeleceConexao();

        System.out.println(":: Conexão estabelecida com sucesso\n");

    }

    public static void mostraMenuInicial() throws ExceptionIPInvalido{
        Scanner scanner = new Scanner(System.in);

        /*MENU DE INIVIALIZAÇÃO*/

        System.out.println("============================");
        System.out.println("          CLIENTE");
        System.out.println("============================");
        System.out.println("\n\n");

        System.out.println(":: Informe a porta do servidor(padrão: 6789): ");
        //Usuário informa porta de conexão
        String p = scanner.nextLine();
        if (!p.isEmpty()){
            porta = Integer.parseInt(p);
        }else{
            porta = 6789;
        }

        System.out.println(":: Informe o ip do servidor: ");
        p = scanner.nextLine();

        //if (validarEnderecoIPcomRegex(p)){
            //endereço válido
            ip = p;

        //}else{
            //endereço inválido
        //    throw new ExceptionIPInvalido();
        //}

    }

    private static boolean validarEnderecoIPcomRegex(String iPaddress){
        final Pattern IP_PATTERN =
              Pattern.compile("b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).)"
                                    + "{3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)b");
        return IP_PATTERN.matcher(iPaddress).matches();
}

}
